package com.woniu.mealsService.controller;


import com.woniu.annotation.RequireRole;
import com.woniu.exception.meals.MealsException;
import com.woniu.mealsService.service.CommentFileUploadService;
import com.woniu.user.client.UserFeignClient;
import com.woniu.user.dto.UserInfoFeignDto;
import com.woniu.utils.EnumException;
import com.woniu.utils.JwtUtil;
import com.woniu.utils.Result;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 评论文件上传表 前端控制器
 * </p>
 *
 * @author jiang
 * @since 2024年12月09日
 */
@RestController
@RequestMapping("/commentFileUpload")
@Api(tags = "评论照片上传")
public class CommentFileUploadController {
    @Autowired
    private CommentFileUploadService commentFileUploadService;
    @Autowired
    private UserFeignClient userFeignClient;
    @PostMapping("/addFile")
    @ApiOperation(value = "上传评论照片")
    /**
     * 上传评论照片接口
     *
     * @param multipartFiles 评论照片，支持多文件上传
     * @param token 用户身份令牌，用于验证用户身份
     * @return 返回包含文件在阿里云oss路径的列表
     * @throws Exception 文件上传过程中可能抛出的异常
     */
    @RequireRole({"学生"})
    public Result<?> addFile(@ApiParam(value = "评论照片") @RequestParam("multipartFiles")MultipartFile[] multipartFiles, @ApiParam(value = "用户token") @RequestHeader("token") String token) throws Exception {
        System.out.println("Uploaded files: " + multipartFiles.length); // 打印文件的数量
        // 解析token获取用户信息
        Claims claims = JwtUtil.parseToken(token);
        String userId = claims.get("userId").toString();
        // 返回文件在阿里云oss的路径
        List<String> filePathes = commentFileUploadService.addFile(multipartFiles, Long.parseLong(userId));
        // 构建并返回文件上传之后可以访问的图片链接
        return Result.getListResult(String.class).setMsg("文件上传成功").setCode(200).setData(filePathes);
    }
    @PostMapping("/deleteFile")
    @ApiOperation(value = "删除评论照片")
    /**
     * 删除评论照片接口
     * 该接口用于删除用户上传的评论照片，根据提供的文件ID和用户token进行操作
     *
     * @param fileId 评论照片的唯一标识符，用于定位待删除的照片
     * @param token 用户的认证信息，用于验证用户身份
     * @return 返回一个Result对象，包含处理结果信息
     * @throws Exception 如果删除过程中发生错误，将抛出异常
     */
    @RequireRole({"商家","学生"})
    public Result<String> deleteFile(@ApiParam(value = "评论照片id") String fileId,@ApiParam(value = "用户token") @RequestHeader("token") String token) throws Exception {
        // 解析token获取用户信息
        Claims claims = JwtUtil.parseToken(token);
        String userId = claims.get("userId").toString();

        // 调用用户服务获取用户信息
        Result<UserInfoFeignDto> userInfo = userFeignClient.getUserInfo(userId);

        // 检查用户信息获取结果，此处省略了处理逻辑
        if (userInfo.getCode()!= 200){}

        // 返回删除结果，此处省略了实际的删除逻辑
        return Result.getResult(String.class).setCode(200).setMsg("删除成功");
    }

}

